/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package it.gmariotti.cardslib.library.internal.base;

import ohos.agp.components.TextFilter;
import ohos.data.resultset.ResultSet;


/**
 * <p>The CursorFilter delegates most of the work to the CursorAdapter.
 * Subclasses should override these delegate methods to run the queries
 * and convert the results into String that can be used by auto-completion
 * widgets.</p>
 */
class CursorFilter extends TextFilter {

    CursorFilterClient mClient;

    @Override
    protected FilterResults executeFiltering(CharSequence charSequence) {
        ResultSet cursor = mClient.runQueryOnBackgroundThread(charSequence);

        FilterResults results = new FilterResults();
        if (cursor != null) {
            results.size = cursor.getRowCount();
            results.results = cursor;
        } else {
            results.size = 0;
            results.results = null;
        }
        return results;
    }

    @Override
    protected void publishFilterResults(CharSequence charSequence, FilterResults results) {
        ResultSet oldCursor = mClient.getCursor();

        if (results.results != null && results.results != oldCursor) {
            mClient.changeCursor((ResultSet) results.results);
        }
    }

    interface CursorFilterClient {
        CharSequence convertToString(ResultSet cursor);

        ResultSet runQueryOnBackgroundThread(CharSequence constraint);

        ResultSet getCursor();

        void changeCursor(ResultSet cursor);
    }

    CursorFilter(CursorFilterClient client) {
        mClient = client;
    }


    public CharSequence convertResultToString(Object resultValue) {
        return mClient.convertToString((ResultSet) resultValue);
    }

}
